import { defineConfig } from 'vite'; // 引入Vite的配置函数
import react from '@vitejs/plugin-react'; // 引入React插件
import svgr from 'vite-plugin-svgr'; // 引入SVGR插件，用于处理SVG图标
import monacoEditorPlugin from 'vite-plugin-monaco-editor'; // 引入Monaco Editor插件，用于在浏览器中渲染Monaco代码编辑器
import replace from '@rollup/plugin-replace'; // 引入替换插件，用于在构建过程中替换代码中的变量
import mockApi from './scripts/mockApiPlugin'; // 引入模拟API插件

// 从环境变量中获取多语言支持设置
var I18N = process.env.I18N;

// https://vitejs.dev/config/
// 定义Vite配置对象
export default defineConfig({
  plugins: [
    // 配置并启用模拟API插件
    mockApi(),

    // 配置并启用React插件，添加Babel配置以支持装饰器和类属性
    react({
      babel: {
        parserOpts: {
          plugins: ['decorators-legacy', 'classProperties']
        }
      }
    }),
    
    // 配置并启用SVGR插件，自定义SVG图标的行为
    svgr({
      exportAsDefault: true,
      svgrOptions: {
        svgProps: {
          className: 'icon'
        },
        prettier: false,
        dimensions: false
      }
    }),
    
    // 启用Monaco Editor插件，无额外配置
    monacoEditorPlugin({}),
    
    // 配置并启用替换插件，根据环境变量决定是否启用国际化
    replace({
      __editor_i18n: !!I18N,
      preventAssignment: true
    })
  ].filter(n => n), // 过滤掉未定义的插件

  // 优化依赖配置
  // optimizeDeps: {
  //   include: ['amis-formula/lib/doc'],
  //   exclude: ['amis-core', 'amis-formula', 'amis', 'amis-ui'],
  //   esbuildOptions: {
  //     target: 'esnext'
  //   }
  // },

  // 配置开发服务器，监听所有IP地址，端口设为3000
  server: {
    host: '0.0.0.0',
    port: 3000
  },

  // 配置路径别名，解决moment库的locale路径问题
  resolve: {
    alias: [
      {
        find: 'moment/locale',
        replacement: 'moment/dist/locale'
      }
    ]
  }
});